package com.javabase.study.OOPFistPart;

/**
 * TODO
 * 内容：测试多态和对象转型
 * 作者:jxx
 * 创建时间：2021/6/16
 */
public class TestPolym {
    public static void main(String[] args){

        //编译时类型为AnaimalTest 运行时类型为 Cat
        AnaimalTest cat = new Cat();//父类引用指向子类对象，可以自动向上转型
        animalCry(cat);//传的是哪一类就调用哪一类的方法，大大提高了程序的可扩展性
        // 如果没有此特性，则需要写多个重载方法，每种动物写一种

        AnaimalTest dog = new Dog();
        animalCry(dog);

        Dog d1 = (Dog)dog;//父类引用想调用编译时类型的方法，需要向下转型，强制类型转换
        d1.seeDoor();


    }
    //有了多态，只需要让增加的类继承自AnaimalTest类就可以了
    static void animalCry(AnaimalTest anaimalTest){
        anaimalTest.shout();
    }
}

class AnaimalTest{
    public void shout(){
        System.out.println("叫一声");
    }
}

class Dog extends AnaimalTest{
    @Override
    public void shout() {
        System.out.println("汪汪汪");
    }
    public void seeDoor(){
        System.out.println("看门中");
    }
}
class Cat extends AnaimalTest{
    @Override
    public void shout() {
        System.out.println("喵喵喵");
    }

}
